#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long

const int N=2e5+5,M=2e3+5;
int n,m,q,f[M][M],d[N],dis[M][M];
vector<int> G[N],H[N];
bool vis[N];

void add(int u,int v){G[u].pb(v),d[v]++;}

void merge(int u,int v){
  if(!vis[v]){
	vis[v]=true;
	for(int i=1;i<=n;i++) f[v][i]=f[u][i];
	f[v][v]=1;
  }else{
    for(int i=1;i<=n;i++){
	  if(f[v][i]==f[u][i]) continue;
	  f[v][i]=2;
	}
	f[v][v]=1;
  }
}

void init(){
  f[1][1]=1,vis[1]=1;
  queue<int> Q;
  Q.push(1);
  while(!Q.empty()){
	int u=Q.front();Q.pop();
	for(auto v:G[u]){
      merge(u,v);
	  --d[v];
	  if(!d[v]) Q.push(v);
	}
  }
//   cerr<<"out"<<endl;

//   for(int i=1;i<=n;i++,cout<<endl) for(int j=1;j<=n;j++) cout<<f[i][j]<<' ';
}

ll SOLVE(int k,vector<int> X){
  bitset<M> g[M];

  vector<int> a;
  for(int i=1;i<=n;i++){
    bool fl=false,fl2=true;
    for(auto u:X){
	  if(f[u][i]==2) fl2=false;
	  if(f[u][i]==1) fl=true;
	}
	if(!fl||!fl2) continue;
	a.pb(i);
    for(int j=0;j<(int)X.size();j++) if(f[X[j]][i]==1) g[i][j]=1; 
  }

  sort(a.begin(),a.end());
  a.erase(unique(a.begin(),a.end()),a.end());
  if(k==1){
	ll ans=0;
	for(int i=0;i<(int)a.size();i++) if((int)g[a[i]].count()==(int)X.size()) ++ans;
	return ans;
  }

  if(k==2){
	ll ans=0;
	for(int i=0;i<(int)a.size();i++)
	  for(int j=i+1;j<(int)a.size();j++)
	    if((int)(g[a[i]]^g[a[j]]).count()==(int)X.size()) ++ans;
    return ans;
  }

  if(k==3){
	ll ans=0;
	for(int i=0;i<(int)a.size();i++)
	  for(int j=i+1;j<(int)a.size();j++)
	    if((int)(g[a[i]]&g[a[j]]).count()==0)
	      for(int k=j+1;k<(int)a.size();k++)
		    if((int)(g[a[i]]&g[a[k]]).count()==0&&(int)(g[a[k]]&g[a[j]]).count()==0&&(int)(g[a[i]]^g[a[j]]^g[a[k]]).count()==(int)X.size()) ++ans;
	return ans;
  }

  if(k==4){
	ll ans=0;
	for(int i=0;i<(int)a.size();i++)
	  for(int j=i+1;j<(int)a.size();j++)
	    if((int)(g[a[i]]&g[a[j]]).count()==0)
	      for(int k=j+1;k<(int)a.size();k++)
		    if((int)(g[a[i]]&g[a[k]]).count()==0&&(int)(g[a[k]]&g[a[j]]).count()==0)
			  for(int p=k+1;p<(int)a.size();p++)
			    if((int)(g[a[i]]&g[a[p]]).count()==0&&(int)(g[a[j]]&g[a[p]]).count()==0&&(int)(g[a[k]]&g[a[p]]).count()==0&&(int)(g[a[i]]^g[a[j]]^g[a[k]]^g[a[p]]).count()==(int)X.size()) ++ans;
	return ans;
  }
  return 0;
}

int main(){
  freopen("lodge.in","r",stdin);
  freopen("lodge.out","w",stdout);
  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  cin>>n>>m>>q;
  for(int i=1,u,v;i<=m;i++) cin>>u>>v,add(u,v);
  init();
  while(q--){
	int k,p;
	cin>>k>>p;
	vector<int> X;
	for(int i=1,x;i<=p;i++) cin>>x,X.pb(x);
	cout<<SOLVE(k,X)<<'\n';
  }
  return 0;
}
/*
4 4 4
1 2
1 3
2 4
3 4
1 1 4
2 1 4
1 1 3
2 2 3 2
*/